﻿var ReturnValue
function Render(Value, store, ColumRe) {
    if (Value == undefined || Value == '' || Value == null)
        return '';
    var str = ' var Record =' + store + '.getById(' + Value + ');'
    str += ' ReturnValue = Record == undefined ? ' + Value + ' : Record.data.' + ColumRe;
    eval(str);
    return ReturnValue;
}
/*
Vẽ lại total cho lưới
*/
function updateTotal(grid) {

    var fbar = grid.getBottomToolbar(),
                column,
                field,
                width,
                data = {},
                c,
                cs = grid.view.getColumnData();

    for (var j = 0, jlen = grid.store.getCount(); j < jlen; j++) {
        var r = grid.store.getAt(j);

        for (var i = 0, len = cs.length; i < len; i++) {
            c = cs[i];
            column = grid.getColumnModel().columns[i];

            if (column.summaryType) {
                data[c.name] = Ext.grid.GroupSummary.Calculations[column.summaryType](data[c.name] || 0, r, c.name, data);
            }
        }
    }
    for (var i = 0; i < grid.getColumnModel().columns.length; i++) {
        column = grid.getColumnModel().columns[i];

        if (column.dataIndex != "") {
            field = fbar.findBy(function(item) {
                return ((item.dataIndex == column.dataIndex) || (item.id == column.dataIndex));
            })[0];

            if (field != null) {
                c = cs[i];
                fbar.remove(field, false);
                fbar.insert(i, field);
                width = grid.getColumnModel().getColumnWidth(i);
                if (!(field.xtype == "container")) {
                    field.setWidth(width);
                    // field.setValue((column.summaryRenderer || c.renderer)(data[c.name], {}, {}, 0, i, grid.store));
                }
                else {
                    field.setWidth(width);
                }


            }
        }
    }
    fbar.doLayout();
}
/*Danh sách khi tìm kiếm nếu luối có Data thì default no se select dong dau tien
GrDataBinding : lưới cần focus
RecoIndext : vị trí cần focus
RecodeID : record co ID cấn focus
exceptControl nếu không có dòng nào thì focus control này
*/
function Complete_Search(GrDataBinding, RecoIndext, RecodeID, exceptControl) {
    if (GrDataBinding.store.data.length > 0) {
        if (RecoIndext == undefined || RecoIndext < 0 || RecoIndext == null)
            if (RecodeID != undefined && RecodeID != null)
            RecoIndext = GrDataBinding.store.indexOfId(RecodeID);
        else {
            var selRecords = GrDataBinding.selModel.selections.items[0];
            if (selRecords != undefined && selRecords != null)
                RecoIndext = GrDataBinding.store.indexOfId(selRecords.id);
            else RecoIndext = 0;
        }
        if (RecoIndext >= 0) {
            GrDataBinding.selModel.selectRow(RecoIndext, false);
            GrDataBinding.getView().focusRow(RecoIndext);
            //GrDataBinding.selModel.selectFirstRow();

        }
    }
    else {
        if (exceptControl != undefined && exceptControl != null) {
            if (exceptControl.xtype == 'coolitegrid') {
                Complete_Search(exceptControl, null, null, null);
            } else
                exceptControl.focus(true, 10);
        }
        //        {
        //            var control = Ext.getCmp(exceptControl);
        //            if (control != undefined)
        //                control.focus();
        //            }
    }
}

/* hiện Messabox theo yeu cầu
Type: loại =1 messabox binh thường
title : tiêu đề
msg: nội dung thông báo
buttons : loại buttons- Ext.MessageBox.OK||CANCEL     
fn : hàm muốn thực thi khi nhấn
icon : Icon muốn hiển thị Ext.MessageBox.INFO||WARNING||QUESTION||ERROR
vnMessageBox(title, msg, Ext.MessageBox.OK, fn, Ext.MessageBox.INFO, 1) 
*/
function vnMessageBox(title, msg, button, fn, icon, type) {
    if (type == undefined)
        type = 1;
    if (type == 1) {
        var msg = Ext.Msg.show({
            title: title,
            msg: msg,
            proxyDrag: true,
            buttons: button,
            closable: true,
            fn: function(resul) {
                if (fn != undefined && fn != null)
                    eval(fn);
            },
            animEl: 'elId',
            icon: icon
        });
        var errMsgWdwGrp = new Ext.WindowGroup();
        errMsgWdwGrp.zseed = 49998;
        msg.getDialog().manager = errMsgWdwGrp;
        Ext.WindowMgr.bringToFront(msg.getDialog());
    }
}
//Dùng cho thông báo có 2 button
/* hiện Messabox theo yeu cầu
Type: loại =1 messabox binh thường
title : tiêu đề
msg: nội dung thông báo
buttons : loại buttons- Ext.MessageBox.OKCANCEL||YESNO     
gnYes:Hàm muốn thực thi khi mún thực hiện:Yes-OK
fnNo : hàm muốn thực thi khi không mún thực hiện:Cancel-NO
icon : Icon muốn hiển thị Ext.MessageBox.QUESTION|
vnMessageBoxConfirm(title, msg, Ext.MessageBox.OKCANCEL, fnYes, fnNo, Ext.MessageBox.QUESTION, 1)
*/
function vnMessageBoxConfirm(title, msg, button, fnYes, fnNo, icon, type) {
    if (type == undefined)
        type = 1;
    if (type == 1) {
        var msg = Ext.Msg.show({
            title: title,
            msg: msg,
            proxyDrag: true,
            buttons: button,
            fn: function(btn) {
                if (btn == 'yes' || btn == 'ok') {
                    if (fnYes != undefined
                && fnYes != null) {
                        eval(fnYes);
                    }
                }
                else { if (fnNo != undefined && fnNo != null) eval(fnNo); }
            },
            animEl: 'elId',
            icon: icon
        });
        var errMsgWdwGrp = new Ext.WindowGroup();
        errMsgWdwGrp.zseed = 49998;
        msg.getDialog().manager = errMsgWdwGrp;
        Ext.WindowMgr.bringToFront(msg.getDialog());
    }
}

/*
Select cấy khi không có node nào được select thì nó sẽ select node gốc 
ngược lại nó sẽ focus lai cai de active
*/
function Focus_Tree(tree, id, type) {
    var node = null;
    if (id != undefined && id != null) {
        node = tree.getNodeById(id);
    }
    else {
        if (tree.selModel.getSelectedNode() != null)
            node = tree.selModel.getSelectedNode();
        else {
            if (tree.rootVisible)
                node = tree.root;
        }
    }
    if (node == null || node == undefined)
        if (tree.root.childNodes.length > 0)
        node = tree.root.childNodes[0];
    if (node != null) {
        node.select();
        node.ui.focus(true);
    }
}

/*
-Focus columnTree
*/
function Focus_TreeColumn(tree, id) {

    var node = null;
    if (id != undefined && id != null) {
        node = tree.getNodeById(id);
    }
    else {
        if (tree.selModel.getSelectedNode() != null)
            node = tree.selModel.getSelectedNode();
        else {
            if (tree.rootVisible)
                node = tree.root;
            else
                if (tree.root.childNodes.length > 0)
                node = tree.root.childNodes[0];
        }
    }
    if (node != null) {
        node.select();
        node.getUI().elNode.focus();
    }
}
/*
-Check cho node trên cây bởi phím space
*/
function space_Checked(tree) {
    var node = tree.getSelectionModel().selNode;
    if (node != '' || node != undefined) {
        var check = node.attributes.checked;
        if (check)
            nodeUnCheckedonTree(node, false);
        else nodeUnCheckedonTree(node, true);
    }
}
/*
Lấy vị trí đang select của tree    
node: node dang select
*/
function GetIndex(node) {
    if (node == null || node == undefined)
        return 0;
    if (node.previousSibling != null)
        return 1 + GetIndex(GetTreeNode_Last(node.previousSibling));
    else
        if (node.parentNode != null)
        return 1 + GetIndex(node.parentNode);
    else return 0;
}
/* 
Lấy node length của một tree
Root= phân từ đầu tiên hiển thị lên cây
*/
function GetTreeNodeLength(Root) {
    if (Root == null || Root == undefined)
        return 0;
    else
        return 1 + GetTreeNodeLength(Root.firstChild) + GetTreeNodeLength(Root.nextSibling);
}
function GetTreeNode_Previous(Node) {
    if (Node.previousSibling != null)
        return GetTreeNode_Last(Node.previousSibling);
    else return Node.parentNode;
}
//Refresh Tất cả data cho cây
function GetTreeNode_Next(Node) {
    if (Node.firstChild != null)
        return Node.firstChild;
    else
        if (Node.nextSibling != null)
        return Node.nextSibling;
    else
        if (Node.parentNode.nextSibling != null)
        return Node.parentNode.nextSibling;
    else return null;
}
function GetTreeNode_Last(Node) {
    if (Node.lastChild != null)
        return GetTreeNode_Last(Node.lastChild);
    else return Node;
}
function Refresh_treeNodeAll(Tree, Root) {

    if (Root == null || Root == undefined)
        return 0;
    else {
        TreeNode_Refresh(Tree, Root)
        return Refresh_treeNodeAll(Tree, Root.firstChild) + GetTreeNodeLength(Tree, Root.nextSibling);
    }


}
/*
-Bỏ chọn node trên cây
*/

function nodeUnCheckedonTree(node, isCheck) {
    node.ui.toggleCheck(isCheck);
}
function ExpandAllParrent(Node) {
    if (Node == null || Node == undefined)
        return;

    if (Node.parentNode != null && Node.parentNode != undefined) {
        Node.parentNode.expand();
        ExpandAllParrent(Node.parentNode);
    }
}
/*
Uncheck tất cả các nút lá và nút ngan cấp với nó
chả ra số node uncheck
*/
function UncheckAllNodeChild(Node) {
    if (Node == null || Node == undefined)
        return 1;
    else {
        nodeUnCheckedonTree(Node, false);
        if (Node.firstChild != null && Node.firstChild != undefined)
            return UncheckAllNodeChild(Node.firstChild) + UncheckAllNodeChild(Node.firstChild.nextSibling)
    }

}
function chekedNodeChild(node, checked) {
    if (node == null || node == undefined)
        return 1;
    else {
        nodeUnCheckedonTree(node, false);
        if (node.nextSibling != null && node.nextSibling != undefined)
            return chekedNodeChild(node.nextSibling);
    }
}
/*
Cập nhật view cho TreeNode
tree: cây
Node: node cần refresh
*/
function TreeNode_Refresh(tree, Node) {
    var a = Node.attributes,
            cols = tree.columns,
            i,
            len = cols.length,
            c,
            el;
    for (i = 0; i < len; i++) {
        c = cols[i],
            text = (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text);
        if (i) {
            if (i == 0)
                el = Node.ui.elNode.firstChild.childNodes[3];
            else
                el = Node.ui.elNode.childNodes[i];
        } else {
            text = text || a.text;
            el = Node.ui.textNode;
        }
        el.innerHTML = text;
    }
}
var Event = null;
//Lấy namsepage Event
//Nếu dùng trong usercontrol thì clientID= '<%=this.ClientID %>'
function GetEvent(clientID) {
    var strEvent = AjaxMethodNamespace;
    if (clientID != null && clientID != undefined && clientID != '')
        strEvent = strEvent + '.' + clientID;
    return eval(strEvent);
}
//Mo
function StartEdit_Grid(GridPanel, rowIdex, columnIdex) {

    if (GridPanel.store.data.length > 0) {
        if (rowIdex == undefined || rowIdex == null) {
            var selRecords = GridPanel.selModel.selections.items[0];
            if (selRecords != undefined && selRecords != null)
                rowIdex = GridPanel.store.indexOfId(selRecords.id);
        }
        if (columnIdex == undefined || columnIdex == null || columnIdex < 0)
            columnIdex = 0;
        GridPanel.selModel.selectRow(rowIdex, false, false)
        GridPanel.getView().focusRow(rowIdex);
        GridPanel.startEditing(rowIdex, columnIdex);

    }
}

function KeyPress_ESC(grid, array, arrayDate, id, index, buttonfocus, type) {
    var record, store = grid.getStore();
    // chia chuỗi string column ra thành mảng.
    if (array != null) {
        var aryField = array.split(',');
    }
    else {
        var aryField = ("").split(',');
    }
    if (arrayDate != null) {
        var arrayDateField = arrayDate.split(',');
    }
    else {
        var arrayDateField = ("").split(',');
    }
    if (grid.hasSelection()) {
        if (id != null) {
            record = store.getById(id);
            if (record != null) {
                FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                return;
            }
            else {
                if (index != null) {
                    record = store.data.items[index];
                    if (record != null) {
                        FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                        return;
                    }
                    else {
                        record = grid.selModel.selections.items[0];
                        FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                        return;
                    }
                }
                else {
                    record = grid.selModel.selections.items[0];
                    FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                    return;
                }
            }
        }
        else {
            if (index != null) {
                record = store.data.items[index];
                if (record != null) {
                    FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                    return;
                }
                else {
                    record = grid.selModel.selections.items[0];
                    FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                    return;
                }
            }
            else {
                record = grid.selModel.selections.items[0];
                FormatRecord(record, grid, aryField, arrayDateField, buttonfocus, type);
                return;
            }
        }
    }
}


// Hàm này dùng để delete record ở trên lưới sau khi mà xóa database thành công, và tự forcus và dòng dưới hoặc là dòng trên nếu như là record cuối cùng.
// Nếu dùng id thì không cần truyền index.
function FocusAfterDelete(grid, index, store, buttonfocus, id) {
    if (grid != null) {
        if (grid.hasSelection()) {
            grid.stopEditing();
            if (typeof (store) == 'undefined' || store == null) {
                store = grid.getStore();
            }
            if (id != null) {
                var record = store.getById(id);
                if (record != null) {
                    index = store.indexOf(record);
                }
                else {
                    index = store.indexOf(grid.selModel.selections.items[0]);
                }
                store.removeAt(index);
            }
            else {
                if (index == null || typeof (index) == 'undefined') {
                    while (grid.selModel.selections.length > 0) {
                        index = store.indexOf(grid.selModel.selections.items[0]);
                        store.removeAt(index);
                    }
                }
                else {
                    if (index != store.indexOf(grid.selModel.selections.items[0])) {
                        index = store.indexOf(grid.selModel.selections.items[0]);
                    }
                    store.removeAt(index);
                }
            }
            len = store.data.length;
            if (len > 0) {
                if (typeof (store.getAt(index)) != 'undefined')
                    Complete_Search(grid, index, null, buttonfocus)
                else if (typeof (store.getAt(index - 1)) != 'undefined')
                    Complete_Search(grid, index - 1, null, buttonfocus);
                else
                    Complete_Search(grid, len - 1, null, buttonfocus);
            }
        }
    }
}



// format record
function FormatRecord(record, grid, aryField, aryDate, btnForcus, type) {
    if (typeof (record) != 'undefined') {
        if (record.modified != null) {
            if (record.id < 0 && (type == null || type == true)) {
                FocusAfterDelete(grid, null, null, btnForcus);
            }
            else {
                if (aryField == '' || aryField == null) {
                    record.reject();
                }
                else {
                    for (var i = 0; i < record.fields.length; i++) {
                        var Field = record.fields.items[i];
                        var Value = record.modified[Field.name];
                        if (Value != null) {
                            if (aryField.indexOf(Field.name) == -1) {
                                if (aryDate.indexOf(Field.name) != -1)
                                    record.set(Field.name, Ext.util.Format.date(Value, 'm/d/Y'));
                                else
                                    record.set(Field.name, Value);
                            }
                        }
                    }
                    record.commit();
                }
            }
        }
    }
}
/*
trước khi hiện ToolTip cho lưới
*/
function BeforshowTip_forGridAll(el, grid) {
    try {
        var rowIndex = grid.view.findRowIndex(el.triggerElement),
                cellIndex = grid.view.findCellIndex(el.triggerElement),
                data = null;
        var record = grid.store.getAt(rowIndex);
        var fieldName = grid.getColumnModel().getDataIndex(cellIndex);
        var Header = grid.getColumnModel().getColumnHeader(cellIndex);
        data = grid.view.getCell(rowIndex, cellIndex).innerText;
        if (Header != '')
            data = '<b style="color:blue;">' + Header + '</b> : ' + data;
        data = '<b>' + data + '</b>';
        el.body.dom.innerHTML = data;
        return true;
    }
    catch (e) {

    }
}

/*
Hàm dùng để Start Edit trên lưới nếu Start thành công thì trả về true ngược lại trả về false
Grid : lưới.
IndexRow : index của row cần start.
IndexColumn : index của column cần start.
*/
function StartEdit(Grid, IndexRow, IndexColumn) {
    if (Grid == null)
        return false;
    if (Grid.getStore().data.length == 0)
        return false;
    try {
        Grid.startEditing(IndexRow, IndexColumn);
    }
    catch (ex) {
        return false;
    }
    return true;
}
///Su kien khi mot dong dc chon
function GridRowSelect(sm, rowIndex, record) {
    if (sm.grid.getStore().getCount() == rowIndex + 1) {
        var newIndex = grDetail.addRecord({});
        var record = sm.grid.store.getAt(newIndex);
        record.commit();
    }
}